<?php
require 'CommonAction.class.php';
/**
 * 后台基础控制器，用户权限控制
 * Enter description here ...
 * @author Code.404
 *
 */
class BaseAction extends CommonAction{
	
	function _initialize(){
		header("Content-Type:text/html; charset=utf-8");
		
		#初始化系统动作参数
		isset($_GET['act']) && $this->_a = $_GET['act'];
		isset($_GET['type']) && $this->_t = $_GET['type'];
		$this->_init_before_auth();
		#访问权限检查控制
		$is_login = ( $_SESSION['local_index'] == $_SERVER['HTTP_HOST'] .__ROOT__  && $_SESSION['admin_login'] ) ? true : false;//判断是否登录
		if(!$this->checkAuthentic($this->getActionName() , ACTION_NAME , $is_login )){//检查访问权限
			$this->redirect($is_login ? 'Index/index' : 'RegAndLogin/login' );//检查不通过跳转页面
		}
		
		$this->_init();
	}
	/**
	 * 初始化方法，子类中通过
	 * 在子类中覆写该方法，实现在方法执行之前完成一系列的操作
	 */
	protected function _init(){}
	/**
	 * 在权限验证之前执行的方法
	 * 如果子类中覆写该方法，可以在权限验证之前进行一些操作
	 */
	protected function _init_before_auth(){}
	
	/**
	 * 判断用户当前状态是否允许执行某控制器
	 * 
	 * @param unknown_type $actionName
	 * @param unknown_type $methodName
	 * @param unknown_type $hasLogin
	 */
	protected function checkAuthentic($actionName,$methodName,$hasLogin = false){
	
		$actionAuthList = $hasLogin ? array(//已登陆情况下####禁止####访问的控制器
				'RegAndLogin'=>array('login'),
			) : 
			array(//未登录情况下####允许####访问的控制器
				'RegAndLogin'=>array('login'),
			);
		
		$ifInList = array_key_exists($actionName, $actionAuthList) && in_array($methodName, $actionAuthList[$actionName]);//判断访问控制器-方法是否在列表中
		
		if($hasLogin ? $ifInList : !$ifInList ){//判断是否允许
			return false;
		}
		return true;
	}
}
?>